home *** CD-ROM | disk | FTP | other *** search
- /***********************************************/
- /* */
- /* <NUMCRO> Ver 1.00 */
- /* All rights reserved , Copyright (c) by RYO */
- /* 19 Feb. 1992 */
- /* */
- /***********************************************/
-
- #include "NUMCRO.H"
-
- int number[LMAX][CMAX];
- char ncword[LMAX][CMAX][2];
- int line,colm,l,c;
-
- main(int argc , char *argv[])
- {
- int arg,no,fileflag,i,j;
- char tx,input,temp[2],path[_MAX_PATH],drive[_MAX_DRIVE],dir[_MAX_DIR],fname[_MAX_FNAME],ext[_MAX_EXT];
- FILE *nolist,*wdlist;
-
-
- /***** スターティングメッセージの表示 *****/
- sprint("\n <NUMCRO> Ver 1.00\n All rights reserved , Copyright (c) by RYO\n 19 Feb. 1992\n\n");
- /***** コマンドラインパラメータの省略値の設定 *****/
- line=LDEF; /* Cross Word Arrey Line Size Set */
- colm=CDEF; /* Cross Word Arrey Column Size Set */
- fileflag=0; /* No File Name Specify */
-
- /***** コマンドラインパラメータの処理 *****/
- for(arg=1 ; arg<argc ; arg++)
- {
- if (*argv[arg]=='?')
- {
- HELP: sprint("\nUSAGE --- numcro [<ファイル名>] [-L<行数>] [-C<桁数>]");
- sprint("\n 順不同。行数,桁数省略値はそれぞれ");
- iprint(LDEF,2);
- putchar(',');
- iprint(CDEF,2);
- exit(0);
- }
- else if (*argv[arg]=='-')
- {
- switch(toupper(*(argv[arg]+1)))
- {
- case'?':goto HELP;
- case'L':no=atoi(argv[arg]+2);
- if ((2<=no)&&(no<=LMAX)) line=no;
- break;
- case'C':no=atoi(argv[arg]+2);
- if ((2<=no)||(no<=CMAX)) colm=no;
- break;
- default:sprint("\nUndefined Parameter --- ");
- sprint(argv[arg]);
- exit(1);
- }
- }
- else
- {
- _splitpath(argv[arg],drive,dir,fname,ext);
- fileflag=1;
- }
- }
-
- /***** 対象問題表示/入力領域の初期化 *****/
- for(i=0 ; i<LMAX ; i++)
- {
- for(j=0 ; j<CMAX ; j++)
- {
- number[i][j]=0;
- strncpy(ncword[i][j],"■",2);
- }
- }
- if (fileflag) /* File Name Specify */
- {
- _makepath(path,drive,dir,fname,".NCN");
- if (access(path,6)==0) /* File Exists */
- {
- nolist=fopen(path,"rb");
- _makepath(path,drive,dir,fname,".NCW");
- wdlist=fopen(path,"rb");
- line=getc(nolist);
- colm=getc(nolist);
- for(i=0 ; i<line ; i++)
- {
- for(j=0 ; j<colm ; j++)
- {
- number[i][j]=getc(nolist);
- ncword[i][j][0]=getc(wdlist);
- ncword[i][j][1]=getc(wdlist);
- }
- }
- fclose(nolist);
- fclose(wdlist);
- }
- else fileflag=-1; /* Nothing , Nwe Files */
- }
- l=c=0;
- putchar('\f');
-
- if (fileflag==1) goto WORD;
- /***** 問題入力画面の処理 *****/
- NUMBER: printf("\x1B= 8☆☆☆ 問題入力画面 ☆☆☆");
- for(i=0 ; i<line ; i++)
- {
- for(j=0 ; j<colm ; j++)
- {
- locate(i,j);
- if (number[i][j]) iprint(number[i][j],2);
- else sprint("■");
- }
- }
- no='\0';
- while(1)
- {
- locate(l,c);
- if (number[l][c])
- {
- revers();
- iprint(number[l][c],2);
- normal();
- }
- else sprint("■");
- locate(l,c);
- input=getch();
- locate(l,c);
- if (number[l][c]) iprint(number[l][c],2);
- if (input=='\x1B') goto EXIT;
- else if (input=='\b') break;
- else if (input==RIGHT)
- {
- nextcolm();
- no='\0';
- }
- else if (input==LEFT)
- {
- revscolm();
- no='\0';
- }
- else if (input==DOWN)
- {
- nextline();
- no='\0';
- }
- else if (input==UP)
- {
- revsline();
- no='\0';
- }
- else if (('0'<=input)&&(input<='9'))
- {
- if (no=='\0')
- {
- no=input;
- number[l][c]=no-'0';
- if (number[l][c]) strncpy(ncword[l][c],"□",2);
- else strncpy(ncword[l][c],"■",2);
- }
- else
- {
- number[l][c]=number[l][c]*10+input-'0';
- if (number[l][c]) strncpy(ncword[l][c],"□",2);
- else strncpy(ncword[l][c],"■",2);
- locate(l,c);
- normal();
- iprint(number[l][c],2);
- nextcolm();
- no='\0';
- }
- }
- }
- /***** 解答入力画面の処理 *****/
- WORD: printf("\x1B= 8★★★ 解答入力画面 ★★★");
- for(i=0 ; i<line ; i++)
- {
- for(j=0 ; j<colm ; j++)
- {
- locate(i,j);
- if (number[i][j])
- {
- putchar(ncword[i][j][0]);
- putchar(ncword[i][j][1]);
- }
- else sprint("■");
- }
- }
- while(1)
- {
- locate(l,c);
- revers();
- if (number[l][c])
- {
- putchar(ncword[l][c][0]);
- putchar(ncword[l][c][1]);
- }
- else sprint("■");
- normal();
- locate(l,c);
- input=getch();
- locate(l,c);
- if (number[l][c])
- {
- putchar(ncword[l][c][0]);
- putchar(ncword[l][c][1]);
- }
- else sprint("■");
- if (input=='\x1B') break;
- else if (input=='\b') goto NUMBER;
- else if (input==RIGHT) nextcolm();
- else if (input==LEFT) revscolm();
- else if (input==DOWN) nextline();
- else if (input==UP) revsline();
- else if (input=='\t')
- {
- if (number[l][c])
- {
- temp[0]=ncword[l][c][0];
- temp[1]=ncword[l][c][1];
- sprint("\x1B[5;36m");
- repaint(number[l][c],"□");
- normal();
- locate(l,c);
- while(getch()!='\t');
- repaint(number[l][c],temp);
- }
- }
- else if (input==' ')
- {
- if (number[l][c]) repaint(number[l][c],"□");
- nextcolm();
- }
- else if ((('!'<=input)&&(input<='~'))||
- (('\xA1'<=input)&&(input<='\xDF')) )
- {
- if (number[l][c])
- {
- ncword[l][c][0]=input;
- ncword[l][c][1]=' ';
- repaint(number[l][c],ncword[l][c]);
- }
- nextcolm();
- }
- else if ((('\x81'<=input)&&(input<='\x9F'))||
- (('\xE0'<=input)&&(input<='\xFC')) )
- {
- if (number[l][c])
- {
- ncword[l][c][0]=input;
- ncword[l][c][1]=getch();
- repaint(number[l][c],ncword[l][c]);
- }
- else getch();
- nextcolm();
- }
- }
- /***** 終了処理 *****/
- EXIT: putchar('\f');
- if (fileflag)
- {
- if (fileflag==1)
- {
- sprint("既存のファイルを書き換えてもいいですか?(Y/N)=");
- if (answer()) sprint("Yes");
- else
- {
- sprint("No");
- goto PRINT;
- }
- }
- _makepath(path,drive,dir,fname,".NCN");
- nolist=fopen(path,"wb");
- _makepath(path,drive,dir,fname,".NCW");
- wdlist=fopen(path,"wb");
- putc(line,nolist);
- putc(colm,nolist);
- for(l=0 ; l<line ; l++)
- {
- for(c=0 ; c<colm ; c++)
- {
- putc(number[l][c] ,nolist);
- putc(ncword[l][c][0],wdlist);
- putc(ncword[l][c][1],wdlist);
- }
- }
- fclose(nolist);
- fclose(wdlist);
- }
- PRINT: sprint("\n数字/文字対応表\を出力しますか?(Y/N)=");
- if (answer())
- {
- sprint("Yes\n");
- for(no=1 ; (no<line*colm)&&(no<=99) ; no++)
- {
- for(i=0 ; i<line ; i++)
- {
- for(j=0 ; j<colm ; j++)
- {
- if (no==number[i][j])
- {
- iprint(no,2);
- putchar('=');
- putchar(ncword[i][j][0]);
- putchar(ncword[i][j][1]);
- sprint(" , ");
- break;
- }
- }
- if (j<colm) break;
- }
- }
- }
- else sprint("No");
- exit(0);
- }